import axios from "axios";

const axiosInstance = axios.create({
    baseURL: "/api",
    headers: { "Content-Type": "application/json" },//默认发送接收都为json格式
    timeout: 1000*60*60*24*7,
});

axiosInstance.interceptors.request.use(
    (config) => {
        //这部分是在请求之前的处理，希望使用令牌和sessionStorage
        //sessionStorage.setItem("token", "your_jwt_token_here");
        const token =sessionStorage.getItem("token");
        if(token){
            config.headers.Authorization = `Bearer ${token}`;//这里变成了Bearer + token
        }
        return config;
    },
    (error) => {
        // 这部分是请求失败的处理，看着可不可以根据状态码做一些处理
        return Promise.reject(error);//Promise返回reject和数据
    }
);

axiosInstance.interceptors.response.use(
    (response) => {
        //在200范围的响应处理
        if(response.status >= 200 && response.status < 300){
            return response.data;//传的是整体内容,code==0/1交给函数处理
        }else{
            // ElMessage.error("服务失败");
            return Promise.reject(new Error(`未期待的错误: ${response.status}`));
        }
    },
    (error) => {
        // 200外的响应错误处理
        let errorMessage;
        if(error.response){
            const status=error.response.status;
            switch(status){
                case 400:
                    errorMessage="请求参数错误";
                    break;
                case 401:
                    errorMessage="未授权，请登录";
                    sessionStorage.removeItem("token");
                    if (window.location.pathname !== '/prior/login') {
                        window.location.href = '/prior/login'; // 强制刷新页面清除状态
                    }
                    break;
                case 403:
                    errorMessage="禁止访问";
                    break;
                case 404:
                    errorMessage="资源未找到";
                    break;
                case 405:
                    errorMessage="请求方法未允许";
                    break;
                case 408:
                    errorMessage="请求超时";
                    break;
                case 500:
                    errorMessage="服务器出现问题";
                    break;
                case 501:
                    errorMessage="网络服务未实现";
                    break;
                case 502:
                    errorMessage="网络错误";
                    break;
                case 503:
                    errorMessage="服务不可用";
                    break;
                case 504:
                    errorMessage="网络超时";
                    break;
                case 505:
                    errorMessage="http版本不支持或未知错误";
                    break;
                default:
                    errorMessage=`请求失败，状态码:${status}`;
            }
        }else if(error.request){
            errorMessage = "请求超时或网络错误";
        }else{
            errorMessage = `请求配置错误: ${error.message}`;
        }
        return Promise.reject(new Error(`访问错误: ${errorMessage}`));//Promise返回reject和数据
    }
)

export default axiosInstance;

